#pragma once

struct IShape
{
    virtual IShape* Clone() = 0;
    virtual void Draw() = 0;
};

class CRectangle : public IShape
{
public:
    CRectangle() { }
    virtual ~CRectangle() { }

    CRectangle(const CRectangle& r)
    {

    }

public:
    virtual IShape* Clone()
    {
        return new CRectangle(*this);
    }

    virtual void Draw()
    {
        std::cout << "Rectangle" << std::endl;
    }

};